#pragma once
#include <ctime>
#include <iostream>
#include <string>
#include <sys/stat.h>
// 工具类
// 1、获取时间
// 2. 文件操作：创建目录、获取文件路径、判断文件是否存在
namespace logs
{
    namespace util
    {
        class Data
        {
        public:
            static time_t getTime()
            {
                return time(nullptr);
            }
        };

        class File
        {
        public:
            // 判断文件是否存在
            static bool exists(const std::string &pathname)
            {
                struct stat st;
                if (stat(pathname.c_str(), &st) < 0)
                    return false;
                else
                    return true;
            }
            // 获取文件路径
            static std::string getPath(const std::string &pathname)
            {
                // ./aa/bb/cc/a.txt
                // std::string::find_last_of 找到字符或子串在字符串中首次出现的位置
                int pos = pathname.find_last_of("/\\");
                if (pos == std::string::npos)
                    return ".";
                return pathname.substr(0, pos + 1);
            }
            // 创建目录
            // 考虑到在Linux下以及Windows下都可以用的情况,需要一级一级的创建目录
            static void createDirectory(const std::string &pathname)
            {
                // ./aa/bb/cc/
                // ./aa/bb/cc
                int idx = 0, pos = 0;
                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx);
                    if (pos == std::string::npos)
                    {
                        mkdir(pathname.c_str(), 0777);
                    }
                    std::string parent_dir = pathname.substr(0, pos + 1);
                    if (exists(parent_dir))
                    {
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(parent_dir.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }
}